home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Retrace.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  4KB  |  165 lines

  1. /*
  2.      File:        Retrace.h
  3.  
  4.      Contains:    Vertical Retrace Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __RETRACE__
  19. #define __RETRACE__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __OSUTILS__
  25. #include <OSUtils.h>
  26. #endif
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31.  
  32. #if PRAGMA_IMPORT_SUPPORTED
  33. #pragma import on
  34. #endif
  35.  
  36. #if PRAGMA_ALIGN_SUPPORTED
  37. #pragma options align=mac68k
  38. #endif
  39.  
  40. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  41. typedef struct VBLTask VBLTask;
  42. typedef VBLTask *VBLTaskPtr;
  43. /*
  44.         This ProcPtr uses register based parameters on the 68k and cannot
  45.         be written in or called from a high-level language without the help of
  46.         mixed mode or assembly glue.
  47.  
  48.             typedef pascal void (*VBLProcPtr)(VBLTaskPtr vblTaskPtr);
  49.  
  50. */
  51.  
  52. #if GENERATINGCFM
  53. typedef UniversalProcPtr VBLUPP;
  54. #else
  55. typedef Register68kProcPtr VBLUPP;
  56. #endif
  57. struct VBLTask {
  58.     QElemPtr                         qLink;
  59.     short                             qType;
  60.     VBLUPP                             vblAddr;
  61.     short                             vblCount;
  62.     short                             vblPhase;
  63. };
  64.  
  65.  
  66. enum {
  67.     uppVBLProcInfo = kRegisterBased
  68.          | REGISTER_ROUTINE_PARAMETER(1, kRegisterA0, SIZE_CODE(sizeof(VBLTaskPtr)))
  69. };
  70.  
  71. #if GENERATINGCFM
  72. #define NewVBLProc(userRoutine)        \
  73.         (VBLUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppVBLProcInfo, GetCurrentArchitecture())
  74. #else
  75. #define NewVBLProc(userRoutine)        \
  76.         ((VBLUPP) (userRoutine))
  77. #endif
  78.  
  79. #if GENERATINGCFM
  80. #define CallVBLProc(userRoutine, vblTaskPtr)        \
  81.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppVBLProcInfo, (vblTaskPtr))
  82. #else
  83. /* (*VBLUPP) cannot be called from a high-level language without the Mixed Mode Manager */
  84. #endif
  85. extern pascal QHdrPtr GetVBLQHdr(void )
  86.  THREEWORDINLINE(0x2EBC, 0x0000, 0x0160);
  87.  
  88.  
  89. #if GENERATING68K && !GENERATINGCFM
  90. #pragma parameter __D0 SlotVInstall(__A0, __D0)
  91. #endif
  92. extern pascal OSErr SlotVInstall(QElemPtr vblBlockPtr, short theSlot)
  93.  ONEWORDINLINE(0xA06F);
  94.  
  95.  
  96. #if GENERATING68K && !GENERATINGCFM
  97. #pragma parameter __D0 SlotVRemove(__A0, __D0)
  98. #endif
  99. extern pascal OSErr SlotVRemove(QElemPtr vblBlockPtr, short theSlot)
  100.  ONEWORDINLINE(0xA070);
  101.  
  102.  
  103. #if GENERATING68K && !GENERATINGCFM
  104. #pragma parameter __D0 AttachVBL(__D0)
  105. #endif
  106. extern pascal OSErr AttachVBL(short theSlot)
  107.  ONEWORDINLINE(0xA071);
  108.  
  109.  
  110. #if GENERATING68K && !GENERATINGCFM
  111. #pragma parameter __D0 DoVBLTask(__D0)
  112. #endif
  113. extern pascal OSErr DoVBLTask(short theSlot)
  114.  ONEWORDINLINE(0xA072);
  115.  
  116.  
  117. #if GENERATING68K && !GENERATINGCFM
  118. #pragma parameter __D0 VInstall(__A0)
  119. #endif
  120. extern pascal OSErr VInstall(QElemPtr vblTaskPtr)
  121.  ONEWORDINLINE(0xA033);
  122.  
  123.  
  124. #if GENERATING68K && !GENERATINGCFM
  125. #pragma parameter __D0 VRemove(__A0)
  126. #endif
  127. extern pascal OSErr VRemove(QElemPtr vblTaskPtr)
  128.  ONEWORDINLINE(0xA034);
  129.  
  130. /* Custom Glue for 68k.*/
  131. #if !GENERATINGCFM
  132. #ifndef CallVBLProc
  133.  
  134. #if GENERATING68K && !GENERATINGCFM
  135. #pragma parameter VBLProcPtr68K(__A1, __A0)
  136. #endif
  137. extern pascal void VBLProcPtr68K(VBLUPP userRoutine, VBLTaskPtr userTask)
  138.  FIVEWORDINLINE(0x48E7, 0xF030, 0x4E91, 0x4CDF, 0x0C0F);
  139.  
  140. /*
  141.  Movem A2-A3/D0-D3,-(SP)
  142.  Jsr (A1)
  143.  Movem (SP)+,A2-A3/D0-D3
  144. */
  145. #define CallVBLProc(userRoutine, vblTaskPtr) \
  146.          VBLProcPtr68K(userRoutine, vblTaskPtr);
  147. #endif
  148. #endif
  149. #endif
  150.  
  151. #if PRAGMA_ALIGN_SUPPORTED
  152. #pragma options align=reset
  153. #endif
  154.  
  155. #if PRAGMA_IMPORT_SUPPORTED
  156. #pragma import off
  157. #endif
  158.  
  159. #ifdef __cplusplus
  160. }
  161. #endif
  162.  
  163. #endif /* __RETRACE__ */
  164.  
  165.